home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 2000-04-06 | 44.9 KB | 1,348 lines
Thu Apr 6 14:15:04 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * NEWS: Version 2.0.2. Sun Apr 2 16:25:27 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * memstat.h, fastmergelogs.cpp, mlog.cpp: Revised log stuff. Sat Apr 1 22:34:04 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * mlog.cpp: Added total object size output. * mergelogs.cpp, log2.h: New (cheaper?) version of log for log reading. Tue Mar 28 16:48:11 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * config.h: Another AIX fix. * NEWS: 2.0.1 Mon Mar 27 21:55:27 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.h, heap.cpp: Fixed the release threshold. * ChangeLog: Version 2.0.1. Sun Mar 26 03:16:51 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: PPC fix. * Makefile.orig: Fix for AIX. Thu Mar 23 22:36:59 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: Directly incorporated alignment value to workaround a g++ bug on IRIX. * heap.cpp, heap.h: Removed numBlocks lookup table (computation is more portable). Wed Mar 22 22:52:55 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.in, NEWS, configure, configure.in, heap.cpp, Makefile.am: Version 2.0. * heap.cpp: Removed support for HEAP_FRAG_STATS & HEAP_DEBUG. * config.h: Reordered stuff to make it clear what may and may not be changed. * memstat.h: Fixed time fields. * memstat.h: Try builtin timeval thing. * mergelogs.cpp: Fixed the equal-time case. * heap.h, memstat.h, mergelogs.cpp, mlog.cpp, processheap.cpp, processheap.h, threadheap.cpp, Makefile.in, heap.cpp: Cruft removal, plumbed processHeap through to allow Unsbrking memory (if this is a good idea), fixed timing of logs on Solaris. Tue Mar 21 22:53:03 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * memstat.h: Added an include. * threadheap.cpp: Aligned logged size requests. * mlog.cpp: Removed a print statement & disabled histogram. * mergelogs.cpp: Slight tweak for speed. * processheap.cpp: Fixed an ownership problem with logging. * Makefile.am, Makefile.in, NEWS, configure, configure.in: Changed to version 1.6. * processheap.cpp: Eliminated now-superfluous NULL test. * processheap.cpp, processheap.h, superblock.cpp, superblock.h, heap.cpp, heap.h: Race freedom for superblocks! Mon Mar 20 22:27:29 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.h, mlog.cpp, processheap.h, heap.cpp: Reverted to 'spinlock' version of superblock acquisition (sigh). * mlog.cpp: Added a time-ordering assertion. * heap.cpp, heap.h: Removed a 'magic number'. * processheap.h, threadheap.cpp: Ownership changes to eliminate NULL ownership and avoid superblock 'chasing'. * log.h: Added a cache pad; removed some spurious fflush(stdout)'s. * memstat.h: Added hi-res timer for Solaris. * superblock.cpp: Fixed an assert. * config.h: Added a note about memalign. * heap.cpp: A few more assertions. * threadheap.h: Added an assertion to guard against bad memalign calls. * heap.h: Empty superblocks can now be immediately reused. Sun Mar 19 03:19:48 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * block.h, config.h, heap.cpp, heap.h, processheap.cpp, superblock.cpp: A number of minor fixes. * superblock.cpp: Use lookup table for number of blocks. * superblock.h: Cleaned up validity checking. Sat Mar 18 20:28:25 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.cpp, heap.h, maketable.cpp: Added numBlocks lookup table; fixed type of hoardHeap::sizeFromClass. * arch-specific.cpp: Moved hoardYield out of an ifdef. * threadheap.cpp, heap.h, log.h, mlog.cpp, processheap.cpp, processheap.h, superblock.cpp, superblock.h, config.h, heap.cpp: Incorporated heap-level superblock recycling; fixed statistics gathering. Fri Mar 17 16:28:09 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.cpp, heap.h, processheap.h, threadheap.cpp: Removed now obsolete heap reassignment stuff in remove*. * Makefile.in, Makefile.am: Added 'module' support. Thu Mar 16 02:32:39 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.cpp, processheap.h, superblock.cpp: Restored heap refills. * arch-specific.h, processheap.h, arch-specific.cpp: Added 'hoardYield'. Wed Mar 15 23:29:27 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * NEWS, maketable.cpp, privateheap.cpp, privateheap.h, processheap.h, superblock.cpp, superblock.h, testmymalloc.cpp, block.h, heap.cpp, heap.h, heapstats.h: Many fixes. * heap.h, heapstats.h, superblock.cpp, superblock.h, heap.cpp: Working stats + move-to-front. * heap.h, heapstats.h, heap.cpp: More changes. Tue Mar 14 21:35:00 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.cpp: Fixed number of blocks. * heap.h, processheap.h, superblock.cpp, superblock.h, block.h, heap.cpp: Added infrastructure for recycling (not yet ready). * maketable.cpp, superblock.cpp, heap.cpp, heap.h: Added static calculation of the number of blocks in a superblock (for each sizeclass). * README: Updated. * heap.cpp: Disabled superblock return to OS (too expensive right now). * heap.cpp, heap.h, processheap.cpp, processheap.h, superblock.cpp, NEWS, arch-specific.cpp: Stripped out recycling. * heap.cpp, heap.h, superblock.h, threadheap.cpp: Fixed stats and removed a now-erroneous assertion. Mon Mar 13 20:36:52 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * testmymalloc.cpp: Changed from doubles to char. Fri Mar 10 15:04:15 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.cpp, processheap.cpp, superblock.cpp, threadheap.cpp: Fixed allocation & deallocation logging (for policy vs. mechanism). * processheap.cpp, processheap.h, superblock.cpp, threadheap.cpp, threadtest.cpp, wrapper.h, arch-specific.cpp, config.h, heap.cpp, memstat.h, mlog.cpp: More revision of aggressive superblock returns. Thu Mar 9 16:44:52 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.h, processheap.h, heap.cpp: Now ownership is never NULLed. * processheap.h: Set ownership (so it's not NULL for long). * heap.cpp, processheap.h: Minor changes. * heap.cpp, processheap.cpp: Forgot to fix the race condition... * superblock.h, threadheap.cpp, heap.cpp, heap.h, processheap.cpp, processheap.h, superblock.cpp: Numerous minor changes (a) to avoid statics in processHeap, on the road to a version that allows multiple heaps, and (b) to quickly catch moving superblocks. Mon Feb 28 17:44:15 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.cpp, superblock.cpp, superblock.h, heap.cpp, heapstats.h, privateheap.cpp, INSTALL, NEWS, README, block.h: Numerous small changes (comments, etc.). * wrapper.cpp, wrapper.h: Changed the initialization to force mmap to be called at startup time by exactly one thread. * config.h, heap.h: Bumped up the empty fraction and correspondingly, the number of emptiness groups. * arch-specific.cpp, arch-specific.h: Added inlining of non-user-level locks. * processheap.h: Added a lock to protect the recycle bin. Thu Feb 24 15:27:28 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * wrapper.cpp: Maybe not just AIX... * arch-specific.cpp: Another lock (around munmap). * arch-specific.cpp: Added a lock around mmap for Linux. * threadheap.cpp: Better error checking. * NEWS, README, ChangeLog, heap.cpp: Version 1.5.2. * Makefile.in: Created by automake 1.4a. * README: Added more people to thank! * wrapper.cpp: Surrounded the redefinitions of C++ stuff with AIX ifdefs. * superblock.cpp: Now propagates mmap errors properly. * arch-specific.cpp: Fixed a mysterious Linux bug. Wed Feb 23 01:55:26 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: Bugfix for Windows. Mon Feb 21 22:34:45 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.cpp: Fixed a space leak for SGI/BeOS. * Makefile.in: Included dependencies. * wrapper.h: Rearranged a line. Sun Feb 20 23:37:02 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * ChangeLog, NEWS: Version 1.5.1. * wrapper.cpp, wrapper.h: A proper fix! Sat Feb 19 22:27:20 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * INSTALL: Added AIX instructions. * Makefile.in: Updated. * Attic/libc-lock.h, Attic/atexit.c, Makefile.am, Makefile.orig: Removed atexit stuff. * wrapper.h: Added some explanatory comments. * wrapper.cpp, wrapper.h: Changed the initialization of the process heap; this bypasses the atexit problems. Fri Feb 18 04:05:35 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * NEWS: Updated the NEWS file. * README: Fixed README discussion of threadtest. * Makefile.orig: Fixed linking with Hoard for testmymalloc. Wed Feb 16 05:15:49 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: Cast ptr to (char *) in munmap, and I don't know why. * threadtest.cpp: New and improved threadtest. * arch-specific.cpp, arch-specific.h, heap.cpp: Added 'unsbrk' (in fact, munmap) for large blocks. Sun Feb 13 04:25:07 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.orig: Changed rt library to posix4, for Solaris 2.6 compatibility. Sat Feb 12 22:43:51 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * config.h: Changed the number of FULLNESS groups to 3 (less than 1/2 full, less than full, full). * processheap.h: Added an assertion about released superblocks. * heap.h: Removed some spurious const's. * heap.h: Changed empty fraction (per analysis -- this makes worst-case contention symmetric for malloc & free). * heap.cpp: A bit of 'defensive programming'. Fri Feb 11 14:48:11 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.cpp: Added a comment. * NEWS: Updated with superblock recycling note. * processheap.cpp, heap.cpp, processheap.h, superblock.cpp, superblock.h: Slight optimizations to recycling. * heap.cpp, processheap.cpp, processheap.h: NIncorporated superblock recycling. Thu Feb 10 21:05:48 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.orig: Removed -fpedantic. * NEWS, README: More info on the AIX port. * benchmarks/larson/driver_mt.cpp, benchmarks/linux-scalability/linux-scalability.c: Some fixes to compile under xlc (AIX). * cache-scratch.cpp: AIX complains about volatile char*, so it's gone. * Makefile.orig, arch-specific.cpp: Added initial AIX support. * heap.h: Fix to avoid a warning. * INSTALL: Added instructions for using the Sun Workshop compilers. * NEWS: Version 1.5 update. * ChangeLog: Version 1.5 ChangeLog updates. * configure.in, heap.cpp, Makefile.in, configure, Makefile.am: Updated everything to version 1.5. * malloc-test.c: Fixed malloc-test for Solaris. * Makefile.orig, benchmarks/larson/Makefile.in: Some Makefile fixes. * benchmarks/shbench/shbench1.cpp: Removed problems for Sun's workshop compilers. * benchmarks/shbench/Makefile.in, benchmarks/larson/Makefile.in, benchmarks/linux-scalability/Makefile.in, README, benchmarks/consume/Makefile.in, INSTALL, Makefile.in, Makefile.orig: Changed everything to refer to libhoard.a instead of hoard.o. * Makefile.orig, configure, configure.in: Improved optimization, etc. for Sun's Workshop compilers. * superblock.cpp, superblock.h: Added caching of the fullness values. * wrapper.cpp: Added replacements for new/delete so that static linking with libhoard.a works. * heap.cpp, heap.h: Now we cache the least-empty bin that we've found (in findAvailableSuperblock) to avoid needlessly pounding through all the bins every time we malloc. * heap.cpp, heap.h: Added empty-fraction checking (so we don't bother returning superblocks until the current heap is largely empty). * benchmarks/consume/Makefile.in, benchmarks/consume/consume.cpp: Restored. * config.h: Removed REMOVE_MAX_ITERATIONS, which is now obsolete. * log.h: Added 'inline' for Sun's compiler (which has a point). Wed Feb 9 04:08:58 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.orig: Added a few warnings for g++ compiles. * block.h: Removed some const declarations. * heap.h, threadheap.cpp: Moved a comment or two. * processheap.cpp: Removed mmap support for now. * superblock.h: Removed some const declarations. * heap.cpp: Fixed binning for superblocks in the process heap. Tue Feb 8 23:15:23 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.cpp, heap.h, Makefile.orig: Added moveSuperblock. * superblock.h, config.h, heap.h, superblock.cpp: Inlined superblock::getFullness and moved an enum into config.h. * testmymalloc.cpp, threadtest.cpp: Dropped the iteration count back down. * processheap.cpp: Removed mmap support for now. * benchmarks/consume/Makefile.in, benchmarks/consume/consume.cpp: Removed consume benchmark. * threadheap.h, heap.cpp, processheap.cpp, threadheap.cpp: Removed deferred frees for now. * benchmarks/consume/consume.cpp: Improved the benchmark. * testmymalloc.cpp, threadheap.cpp, threadheap.h, wrapper.cpp, heap.cpp, processheap.cpp, processheap.h: Added deferred freeing. * benchmarks/consume/consume.cpp: Added #defines for Solaris compatibility. * configure, configure.in: Added consume. * benchmarks/consume/consume.cpp, benchmarks/consume/Makefile.in: Initial check-in. Mon Feb 7 15:14:55 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * threadheap.cpp, threadheap.h, wrapper.cpp, heap.h, processheap.cpp, processheap.h, testmymalloc.cpp, heap.cpp: First shot at deferring free's. Sun Feb 6 02:02:29 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.orig: Added architecture-specific flags. * heap.cpp, heap.h: Restored hysteresis value to 2. Sat Feb 5 03:52:46 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.orig: Restored CPU option for Sparc. * heap.h: Moved some code to avoid an unnecessary test. * threadheap.cpp: added an assertion. * threadtest.cpp: Fixed declaration of worker. * timer.h: Fixed stop() so it adds elapsed times. Fri Feb 4 21:17:39 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.am, Makefile.in: Fixed an accidental inclusion of Hoard in a non-Hoard benchmark. * timer.h, wrapper.cpp, wrapper.h, testmymalloc.cpp, threadheap.cpp, threadheap.h, threadtest.cpp, processheap.cpp, processheap.h, superblock.cpp, superblock.h, log.h, memstat.h, mergelogs.cpp, mlog.cpp, config.h, heap.cpp, heap.h, heapstats.h, arch-specific.cpp, arch-specific.h, block.h, cache-scratch.cpp, Makefile.am, Makefile.in, README: Added bins, changed copyright notice and web page. * mergelogs.cpp: Added start & stop as command-line parameters. * mlog.cpp: Removed time-ordering assertions. * processheap.cpp, processheap.h, superblock.cpp: Added a superblock 'store' to the process heap. Thu Feb 3 17:52:55 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.cpp: Improved speed by just unlinking the logfile. * mlog.cpp: Added a histogram of object sizes. * heap.cpp, heap.h: Changed the superblock size, the number of size classes (so we can support a 1GB malloc) and the hysteresis value. * threadtest.cpp: Increased the number of iterations. * heap.cpp, heap.h, maketable.cpp: Added a hysteresis value. Tue Feb 1 21:50:17 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * mergelogs.cpp: Now we open the logs to be merged in read-only mode. * mlog.cpp: Now we open the log in read-only mode. * log.h: Added read-only log opening. Mon Jan 31 22:59:24 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/larson/driver_mt.cpp: Fixed type of pthread_setconcurrency. * mergelogs.cpp: Now calls 'abort' to avoid unnecessary writing of logs. * log.h: Added abort() = close file without saving any changes. * log.h: Now we only write the perceived number of objects (instead of the 'actual' number) to the logfile. * log.h: Made most memory accesses private (for speed). * log.h: Inlined everything. * testmymalloc.cpp: Removed spurious include. * log.h, memstat.h, mergelogs.cpp, mlog.cpp, heap.h, threadheap.cpp, threadheap.h, wrapper.cpp, processheap.cpp, processheap.h: Fixed logging. Sat Jan 29 04:22:34 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * memstat.h: By encoding the type in the lower bits of the address, we save 4 bytes. * memstat.h, mergelogs.cpp: More fixes and improvements. * heap.h: Restored MAX_HEAPS to 128. * mlog.cpp: Minor tweaks. * log.h: Fixed a bug (forgot to multiply size by MULTIPLIER before caching it). * Makefile.orig: Added -noex for Sun compiler builds. Fri Jan 28 16:56:04 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * mlog.cpp: Added tracking of both measures of fragmentation, with multiplication & subsequent division by 16, as in Wilson & Hohnstone. * log.h: Properly surrounded every call by mutexes. * processheap.cpp, processheap.h: Added allocatedAtMax. * benchmarks/larson/driver_mt.cpp: A fix for Linux. Thu Jan 27 23:10:23 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.orig, log.h, memstat.h, mlog.cpp: More improvements. * mergelogs.cpp: Initial check-in. * log.h, memstat.h, mlog.cpp, threadheap.cpp, threadtest.cpp, Makefile.orig, heap.h: More log-related changes. * processheap.h: Fixed for no-heap-log case. * config.h: Unset log flag. * wrapper.cpp: Instrumented all memory-related calls. * log.h: Made the log threadsafe. * mlog.cpp: First run at a memory log processor. * processheap.h, testmymalloc.cpp, wrapper.cpp, log.h, memstat.h, processheap.cpp, cache-scratch.cpp, config.h: Initial incorporation of logging. Fri Jan 21 18:56:13 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/larson/driver_mt.cpp, configure, configure.in, Makefile.in, Makefile.orig: Changes for the Sun Workshop compiler. * Makefile.orig: Enabled a USE_WORKSHOP target. * processheap.cpp, processheap.h: Moved the destructor to the .h file to avoid a requirement for __builtin_delete. Thu Jan 20 20:45:52 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.in: Updated to handle Sun's CC compiler. * cache-scratch.cpp: Fixed the worker thread's type. * configure.in, configure, Makefile.am, arch-specific.cpp: Changes to allow compilation with the Sun Workshop C++ compiler. * sparc-interchange.il: Inline assembly for the SPARC. * benchmarks/larson/driver_mt.cpp: Slight change to allow compilation with Sun's CC. Sun Jan 16 20:32:01 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * ChangeLog: Version 1.4.2 * Makefile.am, Makefile.in: Changed implementation number. * NEWS: Version 1.4.2 * malloc-test.c: Initial check-in. * superblock.h, threadheap.cpp, threadheap.h, block.h, processheap.cpp, processheap.h: Fixed a subtle memalign bug. Wed Jan 12 17:46:29 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * configure, configure.in, arch-specific.cpp: Changes for Solaris 2.6. * configure, configure.in, arch-specific.cpp, arch-specific.h: Changes for Solaris 2.6 Tue Jan 11 20:47:57 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: More SGI fixes (includes). * arch-specific.cpp: SGI fix. * arch-specific.cpp: Surrounded the pthread_setconcurrency declaration with an ifdef linux. Mon Jan 10 02:20:44 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/linux-scalability/README, benchmarks/larson/README: More comments for benchmarks. Sun Jan 9 20:25:21 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * README, INSTALL, NOTES.Windows: More notes about Windows and BeOS. Sat Jan 8 02:59:58 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: Added an extern declaration for pthread_setconcurrency (esp. for Linux). * processheap.h: Fixed a comment. * testmymalloc.cpp: Removed calls to iostream (replaced with stdio). * superblock.cpp: Fixed type of moreMemory. * superblock.h: Fixed type of getBlockSizeClass. * wrapper.h: Removed 'private' for constructor & destructor (to avoid warning). * processheap.h: Removed math library calls. Thu Jan 6 17:59:13 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * threadtest.cpp, arch-specific.cpp, arch-specific.h, cache-scratch.cpp: Added hoardSetConcurrency. Wed Jan 5 01:34:55 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * README, cache-scratch.cpp: Increased the suggested parameters for cache-scratch. Tue Jan 4 23:24:11 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * ChangeLog: Version 1.4. * cache-scratch.cpp: More details in the comments section. * README, benchmarks/larson/README, cache-scratch.cpp: More info on running benchmarks. * configure: Version 1.4. * README: Added -lthread comment. * cache-scratch.cpp: Added the prelude. * Makefile.am, Makefile.in, Makefile.orig: Added cache-scratch. * cache-scratch.cpp: Divided up repetitions among the threads. * cache-scratch.cpp: Initial version. * processheap.h: Removed the special case for Linux. * configure.in: Version 1.4. * arch-specific.cpp: Added an ugly (but effective) workaround to directly parse the /proc/cpuinfo file on Linux to obtain the number of CPUs * README: Changed -lpthread to -lthread. * NEWS: Updated. * Makefile.am: Version 1.4. Mon Jan 3 21:54:06 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.cpp, processheap.h, threadheap.cpp, heap.cpp, heap.h: Numerous small changes. * arch-specific.cpp: Removed some useless vars. * arch-specific.cpp: Increased the spin limit to something a bit more reasonable. * heap.cpp: Version 1.4. * processheap.cpp: Updated a comment and spelled out a couple of variable names. * maketable.cpp, processheap.cpp, superblock.h, heap.cpp, heap.h: Added a threshold lookup table. * testmymalloc.cpp, threadheap.cpp, threadheap.h, heapstats.h, processheap.cpp, superblock.cpp, superblock.h, arch-specific.cpp, heap.h: A variety of fixes and comment modifications. Sun Jan 2 05:23:56 2000 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/shbench/README, benchmarks/linux-scalability/README, benchmarks/README, benchmarks/larson/README: More information. * Makefile.orig: Added two more threadtest targets. * threadtest.cpp: Increased the number of iterations from 10 to 50. Fri Dec 31 20:45:34 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/shbench/shbench1.cpp: Brought back from the dead (I just won't release it). * benchmarks/larson/Makefile.in, benchmarks/linux-scalability/Makefile.in, benchmarks/shbench/Makefile.in: Fixed to use config-time variables. * processheap.cpp: Removed some newSizeclass cruft. * privateheap.cpp: Restored some locks. * arch-specific.cpp: Added BeOS number of processors. * processheap.h: Renamed 'allocator' to 'getHeap'; removed lock from getHeap. * threadheap.cpp: Moved lock back to malloc(). * wrapper.cpp: Renamed 'allocator' to 'getHeap'. Thu Dec 30 21:40:37 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * configure: Updated. * processheap.h: Added fast rounding (via numProcessorsMask) and removed thhe 'optimization' for 1 processor that only slowed things down. * heap.h: Restored superblock size to 3 pages (it *does* make a difference for the Larson benchmark). * benchmarks/larson/Makefile.in: Added LIBSCHED parameter. * configure.in: Fixed order of library checks for -lthread inclusion (Solaris). * configure: Updated. * processheap.h: Static decl. must be first. * superblock.cpp: A comment here, an assertion there... * benchmarks/larson/Makefile.in: A few minor improvements. * heap.h: Removed MAX_TIDS; brought superblock size down to 8K with no significant impact on runtime (!). * processheap.cpp: Removed MAX_TIDS. * INSTALL, NOTES.Windows, NEWS: Work towards release 1.4. * README, Makefile.orig: Minor changes. * processheap.h: Hash thread ID's to no more than 2 * numProcessors heaps (except for Linux). * configure.in: Added a check for Solaris (and use of -lthread. Tue Dec 28 05:03:50 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/larson/driver_mt.C, benchmarks/larson/driver_mt.cpp, benchmarks/larson/Makefile.in: The new benchmark. * processheap.h: Fixed a problem with Linux. * processheap.cpp: Removed some (now) cruft. * heap.h, arch-specific.cpp, arch-specific.h: Trashed tryLock(). * heap.h: Added a useful comment or two. * processheap.h: Removed some (now) cruft. * benchmarks/larson/driver_mt.cpp: Newest version from Paul Larson. * Makefile.orig: Added a SOLARIS target. * arch-specific.cpp: Changed the thread ID algorithm for Solaris to hash on the LWP. * processheap.h: Backed off the thread id stuff. * privateheap.cpp, wrapper.cpp: Fixed private heaps. Fri Dec 24 01:31:19 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.h: Broke out tids from heaps. Thu Dec 23 17:47:42 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.cpp, processheap.h: Back to maxIndex. * processheap.h: Back to the maxIndex scheme for now... * processheap.cpp, processheap.h: More tweakage. Wed Dec 22 20:18:45 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.h, processheap.cpp: More tweakage. * processheap.h, processheap.cpp: Yet more work on the heap selection algorithm. * arch-specific.cpp, arch-specific.h: Added hoardGetNumProcessors() {without the BeOS version, for now}. * processheap.h: Another revision to the heap assignment algorithm. * processheap.cpp, processheap.h: More revisions to the heap assignment algorithm. * arch-specific.cpp: Fixed tryLock for the BeOS; some clean-up and comments added. * arch-specific.cpp: Added some #defines for clarity; changed the blocking lock to a yielding lock for UNIX non-user-level locks. * processheap.cpp, processheap.h: Changed the heap assignment algorithm to use a maximum index value (we assume that reads and writes to ints are atomic). * NOTES.Windows: Initial check-in. * benchmarks/larson/driver_mt.C: Just to be safe, initialize the thread's attribute. * Makefile.in, Makefile.am: Changed the version info for the library. * wrapper.cpp: Changed calls to free from threadHeap into processHeap. * threadheap.cpp, threadheap.h: Moved free from threadHeap into processHeap. * superblock.h, superblock.cpp: Superblocks with more than one block are now all SUPERBLOCK_SIZE bytes long to eventually permit superblock recycling and unmapping; added some more sanity checking for debugging. * processheap.cpp, processheap.h: Improved the heap selection algorithm to adapt with respect to concurrency; moved free from threadHeap. * heap.h, heap.cpp: Removed the now-unused sizeclass argument from lock operations; added tryLock; added more comments and sanity checks. * heapstats.h: Removed the now-superfluous cache pad. * arch-specific.cpp, arch-specific.h: Added hoardTryLock; gave everything C linkage (on the road to breaking out the assembly code into processor-specific files). * configure, configure.in: Added tests for processors. Fri Dec 17 16:52:21 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.h: Fix to lock type for STATS compilation. Thu Dec 16 20:55:21 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/shbench/shbench1.cpp, benchmarks/shbench/Attic/shbench.cpp: Removed copyrighted SmartHeap benchmarks. * threadheap.cpp: Simplified the test for 'big' superblocks. * heap.h, superblock.cpp: Changed NUMBER_OF_BYTES to the more descriptive SUPERBLOCK_SIZE. Wed Dec 15 04:19:00 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.in: Automake 1.4a produced output. * arch-specific.cpp: Some comment mods. * superblock.cpp: Restored required alignment tweak for sbrk(). * processheap.cpp, processheap.h: Backed off recycling stuff for now. Tue Dec 14 23:41:23 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.am, Makefile.in, configure, configure.in: Added a required LIBSCHED. * processheap.cpp, superblock.cpp, processheap.h, superblock.h: Added release-time empty superblock recycling. * configure, configure.in: Fixed a problem looking for sched_yield. * arch-specific.cpp: Added 'yield' to Windows NT code. Wed Nov 24 20:24:32 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * NEWS: Fixed spelling of John's last name! * ChangeLog, NEWS: Version 1.3.3. * arch-specific.cpp, superblock.cpp, threadheap.h, threadtest.cpp, Makefile.orig: A variety of SGI-related changes. Tue Nov 23 15:18:28 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * ChangeLog: Version 1.3.2. * INSTALL, NEWS, threadtest.dsp, timer.h, wrapper.cpp, libhoard.dsp, libhoard.dsw, testmymalloc.dsp: Changes for Windows (Visual C++) release. Mon Nov 22 16:54:40 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * Attic/atexit.c: Fixed to allow multiple exit functions. * Makefile.in: Removed those annoying automake, etc. alls. * ChangeLog: Version 1.3.1. * configure.in, NOTES.BeOS, configure, Makefile.am, Makefile.in, Makefile.orig, NEWS, INSTALL: Added a custom version of atexit to fix the Linux-deadlock problem created with glibc 2.1.2. * benchmarks/shbench/shbench1.cpp, threadtest.cpp: Increased the default number of iterations. * Attic/libc-lock.h, exit.h: Initial check-in, for Linux only. * Attic/atexit.c: Modified version of glibc's atexit to avoid calls to malloc. Fri Nov 19 14:04:34 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: Added PowerPC locks. Thu Nov 18 21:49:52 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * threadtest.cpp: Added SGI-specific mods for the 'threadtest' test. * ChangeLog: Latest changes rolled in. * NEWS: Added thanks to John Hickins. * INSTALL: Corrected a typo. Wed Nov 17 18:14:29 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * configure, configure.in: Incremented the version number. * benchmarks/larson/Makefile.in, benchmarks/linux-scalability/Makefile.in, benchmarks/shbench/Makefile.in, configure, configure.in, Makefile.am, Makefile.in: Added checks for sched_yield in librt, removed some cruft. * ChangeLog: Yet Another ChangeLog commit. * INSTALL: Added platform-specific installation info. * README: Changed the Hoard home page info, moved platform-specific info to INSTALL. Tue Nov 16 22:07:55 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * wrapper.cpp, README, arch-specific.cpp, arch-specific.h, timer.h, Makefile.orig: More BeOS changes. * ChangeLog: *** empty log message *** * benchmarks/linux-scalability/linux-scalability.c: Added the PTHREAD_SCOPE_SYSTEM patch. * ChangeLog: Version 1.3 mods incorporated. * README, NEWS: Changes for version 1.3. Thu Nov 11 21:25:24 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.h, heap.cpp: Replaced per-sizeclass locks with per-heap locks on the assumption that this won't hurt scalability (since most objects allocated are in a small number of size classes) and to reduce Hoard's static footprint. * Makefile.in: Changed version number to 1.2. * privateheap.h, privateheap.cpp: Removed the SUBHEAPS option. * configure, configure.in: Removed the SUBHEAPS option and some warning flags for gcc/g++. * Makefile.orig: Removed the SUBHEAPS option. * arch-specific.h: Added BeOS stuff. * arch-specific.cpp: Add BeOS stuff; moved the thread hashing fix here from processheap.h. * processheap.h: Removed the subheap option and moved the thread index hashing stuff to arch-specific.cpp. Fri Oct 29 18:29:05 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * ChangeLog: Removed all 'Attic' entries. * ChangeLog: A real ChangeLog, produced by rcs2log. * superblock.h: Added a cache pad to avoid false sharing of superblock data. * NEWS: Brought the NEWS file in line with GNU standards. * heap.h: Subtracted the size of a superblock from NUMBER_OF_BYTES. Thu Oct 28 00:59:53 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * config.h: Increased cache line size (for SGI O2K). Wed Oct 27 20:43:20 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * threadheap.h, wrapper.h, processheap.h, superblock.h, threadheap.cpp, block.h, heap.cpp, heap.h: Comment updates. * configure.in, configure: Disabled inclusion of -lpthread when using sproc. * configure, configure.in: Now SPROC is defined as 0 by default. * configure, configure.in, Makefile.am: Updated to version 1.2. * README: Changed date on README. * ChangeLog: Updated ChangeLog to version 1.2. * README: Updated README to include sproc target. * configure, configure.in: Added sproc options. * Makefile.orig, arch-specific.cpp, configure.in: Improved sproc handling. Tue Oct 26 22:27:48 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp, arch-specific.h: First run at SPROC stuff. Thu Oct 21 03:28:16 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: Reset spin count to zero after every iteration in our lock implementation. Wed Oct 20 21:49:54 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.orig: Removed dependence on UltraSPARC. * Makefile.orig: Needed -lrt for Solaris. * arch-specific.h, config.h, arch-specific.cpp: More fun with spin locks. * heap.h: Moved out the spin part (should be in arch-specific anyway). * heap.cpp: Fixed the size table. * maketable.cpp: Fixed the size table generation. * arch-specific.cpp, arch-specific.h, config.h: Added 'USERLOCKS' option -- user-level spin locks -- which are much faster on Linux. Tue Oct 19 16:12:05 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp, block.h, privateheap.cpp, threadheap.cpp: Removed some UNIX dependencies. * timer.h, arch-specific.cpp, arch-specific.h: More Windows-related changes. Sat Oct 16 20:23:31 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * testmymalloc.cpp, wrapper.cpp, Makefile.am, Makefile.in, arch-specific.cpp, arch-specific.h, processheap.cpp: Made a variety of Windows-related changes. * config.h: Changed CACHE_LINE (SPARC's L2 size is 64, not 128 bytes). Fri Oct 15 14:48:28 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp: Changed mutex_unlock (for Windows NT) to use InterlockedExchange so it will work on Alphas, too. Tue Oct 12 21:37:09 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * Makefile.in, README, INSTALL, Makefile.am: More minor updates. * benchmarks/shbench/Makefile.in, benchmarks/linux-scalability/Makefile.in, benchmarks/larson/Makefile.in, configure, configure.in: More configuration improvements. * benchmarks/shbench/timer.h: Fixed to work on the SGI. * maketable.cpp: Added UL to the table output. * heap.cpp: Made the table a constant (to be built by maketable.cpp). * maketable.cpp: Added the table generator. * README: More changes for version 1.1. * Makefile.orig: The original Makefile. * README: Just added a newline. * NEWS: Put something in NEWS. * README, docs/UTCS-TR99-22.ps.gz: Moved the tech report into a docs folder. * benchmarks/larson/driver_mt.C, benchmarks/linux-scalability/linux-scalability.c: Fixed some compilation bugs, added local library path to the compiles. * Makefile.am, Makefile.in: Minor Linux fixes. Mon Oct 11 21:27:33 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * configure, configure.in: More fixes. * configure, configure.in, INSTALL, README: Fixed some Windows NT-specific foo. * Makefile.am, Makefile.in, README: More minor changes. * Makefile.am: Changed version number for shared lib. * Makefile.in, configure, configure.in, ChangeLog, Makefile.am: Version 1.1. * INSTALL: Basic installation instructions. * autoconf/mkinstalldirs, autoconf/ltconfig, autoconf/ltmain.sh, autoconf/missing, autoconf/config.guess, autoconf/config.sub, autoconf/install-sh, configure.in, NEWS, README, aclocal.m4, configure, Makefile.am, Makefile.in: Incorporated the Ganesan Rajagopal scripts (slightly modified). Thu Oct 7 16:37:21 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * block.h: Disabled copying and assignment; added initialization of _next field. * threadheap.h: Removed _busy field. Wed Oct 6 20:10:23 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * privateheap.h: Fixed privateheap unlock method. Tue Oct 5 20:53:02 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * README: New release date. * heap.cpp, heap.h: Fixed some wackiness with the size classes. * arch-specific.cpp, arch-specific.h, testmymalloc.cpp, README: Rolled in more Windows NT changes. Mon Oct 4 19:07:13 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * config.h, timer.h, arch-specific.cpp: Rolled in some SGI-specific changes. * ChangeLog: Initial check-in. * arch-specific.cpp, processheap.h, superblock.cpp, superblock.h: Removed some reliance on Suns (yow!). Sun Oct 3 19:31:00 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/README: Initial check-in. * README: Updated date. * arch-specific.cpp: Fixed ifndef (changed to ifdef). * privateheap.h, arch-specific.h, heap.cpp, heap.h, privateheap.cpp, arch-specific.cpp: Incorporated more changes for the Windows NT build. Sat Oct 2 04:04:19 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * arch-specific.cpp, arch-specific.h: More Windows foo. * threadheap.cpp, threadtest.cpp, processheap.cpp, processheap.h, superblock.cpp, superblock.h, heap.cpp, heap.h, privateheap.cpp, privateheap.h, arch-specific.cpp, arch-specific.h: Added arch-specific files; changed all architecture-specific (read: UNIX) commands to use these wrappers. Thu Sep 30 21:17:43 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * testmymalloc.cpp: Restored iostream.h (DOH DOH DOH). Wed Sep 29 13:22:06 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * superblock.h, testmymalloc.cpp, threadheap.cpp, privateheap.cpp, processheap.cpp: Removed iostream.h includes. * timer.h, wrapper.cpp, wrapper.h, superblock.h, testmymalloc.cpp, threadheap.cpp, threadheap.h, threadtest.cpp, heapstats.h, processheap.cpp, processheap.h, superblock.cpp, README, block.h, config.h, heap.cpp, heap.h: Added preambles to everything. * config.h, README: More additions and deletions. * timer.h, processheap.h, threadheap.cpp, config.h, heap.cpp, heap.h, ChangeLog, INSTALL, COPYING: Cleanup time. Tue Sep 28 22:11:06 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * heap.h, config.h: Minor changes (removed other targets). * README: More README info. * AUTHORS, COPYING, ChangeLog, INSTALL: Initial revision * AUTHORS, COPYING, ChangeLog, INSTALL, README: new project started Wed Sep 22 13:42:29 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * privateheap.cpp: Some bug fixes. * block.h: Changed dummy (pad) variable names to avoid clashes. Tue Sep 21 18:43:39 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * privateheap.cpp, privateheap.h: Fixed a carve-off problem. * config.h: Updated a comment. * superblock.cpp: Added (still not working?) mmap stuff; currently disabled. * config.h: Fixed a comment; returned two flags to their appropriate defaults. Mon Sep 20 05:27:44 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.h, threadheap.cpp, privateheap.cpp, processheap.cpp: Fixed some screwiness with fragmentation stats; added a Linux-specific hack to get more reasonable thread-to-processor mapping. * processheap.cpp, processheap.h, threadheap.cpp, privateheap.cpp, privateheap.h: Added locks for statistics gathering. Sun Sep 19 06:17:12 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.h, config.h, heap.h, processheap.cpp: Changed the size class base to 1.2 (and upped the number of size classes to 128); fixed the fragmentation calculations. * privateheap.cpp: Slight tweak required to get privateHeap to work with the new, more flexible size class system. * privateheap.cpp, privateheap.h: The private heap variant (for experimental use only). * processheap.h, config.h, heap.h: A few more comments and some consolidation of constants. * heap.cpp, heap.h: Removed big ugly static block; moved initialization of the sizeTable to the heap's constructor. Changed some names to reflect the 'private-members-have-underscores' convention. Sat Sep 18 23:27:18 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * superblock.cpp, superblock.h, testmymalloc.cpp, threadheap.cpp, block.h, config.h, heap.cpp, heap.h: Now the size class base is 'flexible'; this allows us to dramatically reduce internal fragmentation. * config.h: Avoid redefining _REENTRANT. * block.h: A variety of fixes for non-standard targets. Wed Sep 15 22:39:16 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/larson/driver_mt.C: Disabled the warmup thing, added a bogus print of seconds for the Perl script that processes the data. * config.h, superblock.h: Commit the actual values used for the experiments. Mon Sep 13 15:46:01 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * threadtest.cpp, processheap.cpp, processheap.h, superblock.h, threadheap.cpp, heap.cpp: Fixed a MAJOR bug that was killing us; moved around some code and added some useful comments. * heap.cpp, heap.h, superblock.cpp, superblock.h: Simplified (and fixed) the superblock interface. Sun Sep 12 02:45:06 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * processheap.cpp: Simplified some code. * heapstats.h: Removed some outdated assertions. Sat Sep 11 18:23:59 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * threadheap.cpp: Made the search for a block into a loop. * threadheap.cpp: Fixed lock loop. * superblock.cpp, superblock.h, threadheap.cpp, config.h, heap.cpp, heap.h, processheap.cpp: Made superblocks into a doubly-linked list (I had forgotten to remove superblocks when releasing them!). * config.h, superblock.h: Added some more meaningful comments. Fri Sep 10 21:13:08 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * config.h, heapstats.h, processheap.h: A few changes needed by the IBM compiler. * config.h: More processors. * superblock.h: Fewer bytes. * heap.h: Added a spinlock. Wed Sep 8 03:17:41 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * threadheap.cpp: 'Big' objects are BIGGER than NUMBER_OF_BYTES, not the same size. Tue Sep 7 17:59:05 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * wrapper.cpp, processheap.cpp, superblock.h, threadheap.cpp: Large objects now are unconditionally returned to heap 0. * processheap.h, threadheap.cpp, config.h, processheap.cpp: Turned off debugging, fixed erroneous extra decrement (oops). * heapstats.h, processheap.cpp, wrapper.cpp, config.h, heap.cpp: Cleaned up some foo; added a decStats -- looks like I'd forgotten it... * benchmarks/larson/driver_mt.C, heapstats.h: Routine check-in. * benchmarks/shbench/shbench1.cpp, benchmarks/larson/driver_mt.C, benchmarks/linux-scalability/linux-scalability.c, benchmarks/larson/ptmalloc.h, benchmarks/larson/thread-m.h, benchmarks/larson/driver_mt.c, benchmarks/larson/parallel.h, benchmarks/larson/perfcounters.h, benchmarks/larson/ptmalloc.c, benchmarks/larson/dlm.h: Initial check-in. * threadtest.cpp: Each worker now iterates 10 times. * threadheap.cpp, threadheap.h: Put getBlock code back into malloc (since it's never called by anyone else). * testmymalloc.cpp, config.h, superblock.cpp, superblock.h, block.h: Updated some comments. Mon Sep 6 20:48:50 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * superblock.cpp: Removed cruft and excess memory consumption (left over from when we used non-blocking bags). * config.h: Removed some cruft. * benchmarks/shbench/Attic/shbench.cpp, wrapper.cpp, wrapper.h, threadtest.cpp, timer.h, testmymalloc.cpp, threadheap.cpp, threadheap.h, processheap.h, superblock.cpp, superblock.h, processheap.cpp, heap.cpp, heap.h, heapstats.h, config.h, README: Provably memory-efficient version with just one lock per heap. Fast and furious! Mon Jun 28 17:41:03 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * benchmarks/shbench/timer.h, benchmarks/shbench/Attic/shbench.cpp: SHbench - from Microquill. Sat Jun 26 18:19:10 1999 Emery Berger <emery@bigsky.cs.utexas.edu> * heapstats.h, processheap.h, timer.h: Initial check-in. * heapstats.h, processheap.h, timer.h: Initial revision * config.h, heap.cpp, heap.h, processheap.cpp, superblock.cpp, superblock.h, testmymalloc.cpp, threadheap.cpp, threadheap.h, threadtest.cpp, wrapper.cpp, wrapper.h: Initial check-in. * config.h, heap.cpp, heap.h, processheap.cpp, superblock.cpp, superblock.h, testmymalloc.cpp, threadheap.cpp, threadheap.h, threadtest.cpp, wrapper.cpp, wrapper.h: Initial revision